/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mundo;

import java.io.Serializable;
import java.util.List;

/**
 *
 * @author cesarfgt
 */
public class Punto implements Serializable{
    private int x;
    private int y;
    private String alias;

    public Punto(int x, int y, String alias) {
        this.x = x;
        this.y = y;
        this.alias = alias;
    }
    
    public Punto(int x, int y) {
        this.x = x;
        this.y = y;
        this.alias = "Calle";
    }
    public String getAlias() {
        return alias;
    }

    public void setAlias(String alias) {
        this.alias = alias;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    @Override
    public String toString() {
        return ("(x=>"+x+",y=>"+y+")");
    }

    @Override
    public boolean equals(Object obj) {
        if(obj==null){
            return false;
        }
        Punto c=(Punto)obj;
        if((x==c.getX())&&(y==c.getY())){
            return true;
        }
        return false;
    }
    
    public Punto Cercano(List<Punto> puntos){
        Punto p=null;
        double disMax=Double.MAX_VALUE;
        int j=-1;
        for(int i=0;i<puntos.size();i++){
            double t=this.Distancia(puntos.get(i));
            
            if(t<disMax){
                j=i;
                disMax=t;
            }
        }
        if(j==-1){
            return null;
        }
        if(disMax==0){
            return null;
        }
        return puntos.get(j);
    }
    
    public boolean inPuntos(List<Punto> puntos){
        
        for(int i=0;i<puntos.size();i++){
            if(puntos.get(i).equals(this)){
                return true;
            }
        }
        
        return false;
    }
    
    public double Distancia(Punto p){
        if(p==null){
            return 0;
        }
        return Math.hypot(p.getX()-this.x, p.getY()-this.y);
    }

    
}
